Skip to content

fix(attachments): persist images on disk + lazy-load chips on demand#20

Merged
OmGuptaIND merged 1 commit into
mainfrom
OmGuptaIND/image-persist-fix
Apr 30, 2026
Merged

fix(attachments): persist images on disk + lazy-load chips on demand#20
OmGuptaIND merged 1 commit into
mainfrom
OmGuptaIND/image-persist-fix

Conversation

@OmGuptaIND
Copy link
Copy Markdown
Contributor

Summary

  • Image attachments now survive session reload: history payloads carry only metadata, and the renderer fetches bytes through a new request_attachment WS round-trip with an in-memory blob-URL + IndexedDB + server three-tier cache.
  • Fixes the project-scoped loader, which previously called hydrateSessionContent on the entire message object (returns undefined) instead of hydrateSessionMessage — image chips disappeared from "My Computer" sessions despite the bytes being on disk.
  • Hardens persistence: atomic tmp+rename writes, a traversal-guarded resolveSessionImagePath, and an ANTON_DIR env override for tests.
  • Adds user-initiated session rename (Sidebar + TasksListView) with optimistic UI, a server session_rename handler that mirrors the auto-titling flow, and a refreshSessionIndex for cross-restart durability.
  • Bootstraps vitest at the repo root and adds the first suite (attachments.test.ts) covering round-trip persistence and resolveSessionImagePath traversal cases; also drops the unfinished Plugins tab and the manual "Add model" form, and adds gpt-5.5 / gpt-5.4 to the OpenAI defaults.

Test plan

  • pnpm verify (typecheck + biome + vitest)
  • Send a message with an image attachment, restart the app, confirm the chip + hover preview + viewer all render from disk
  • Rename a session from the sidebar and from the tasks list; confirm meta.json updates and the new title survives a reconnect
  • Verify project-scoped ("My Computer") sessions also rehydrate image chips after reload

🤖 Generated with Claude Code

Image attachments now round-trip through session reload: history payloads
carry only metadata, the renderer fetches bytes via a request_attachment
WS round-trip, and a three-tier cache (in-memory blob URL, IndexedDB, WS)
keeps repeated views cheap. Also fixes a project-scoped loader that called
hydrateSessionContent on a whole message instead of hydrateSessionMessage,
adds atomic image writes + a traversal-guarded resolveSessionImagePath,
introduces user-initiated session rename with optimistic UI, and adds the
first vitest suite covering the round-trip.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@OmGuptaIND OmGuptaIND merged commit 5fa161d into main Apr 30, 2026
@OmGuptaIND OmGuptaIND deleted the OmGuptaIND/image-persist-fix branch April 30, 2026 22:35
OmGuptaIND added a commit that referenced this pull request Apr 30, 2026
### Features
- auto-activated skills + builtin document-creation packages (#19)

### Other
- fix(attachments): persist images on disk + lazy-load chips on demand (#20)
- feat(chat): collapsible turn progress + per-turn source cards (#18)
- fix(artifacts): premium split panel + render docx/pdf/xlsx in files view (#17)
- fix(ask-user): commit answers only on explicit submit (#16)
- docs(spec): session log architecture — append-only log + multi-client channel (#15)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant